package com.pan.alg.niuke.tree;

/**
 * 求给定二叉树的最大深度，
 * 深度是指树的根节点到任一叶子节点路径上节点的数量。
 * 最大深度是所有叶子节点的深度的最大值。
 * （注：叶子节点是指没有子节点的节点。）
 *
 *
 * 数据范围：0 \le n \le 1000000≤n≤100000，树上每个节点的val满足 |val| \le 100∣val∣≤100
 * 要求： 空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
 */
public class TreeNodeMaxDepth {

    /**
     *
     * @param root TreeNode类
     * @return int整型
     */
    public int maxDepth (TreeNode root) {
        // write code here

        int maxDepth = preTree(root,0);
        return maxDepth;
    }

    private int preTree(TreeNode root, int maxDepth) {
        if(root==null){
            return maxDepth;
        }
        maxDepth++;
       int leftMax =  preTree(root.left,maxDepth);

       int rightMax = preTree(root.right,maxDepth);
       return Math.max(leftMax,rightMax);
    }
}
